package utils

import (
	"sync"
	"time"
)

var (
	dateUtilTemp *dateUtil
	dateUtilOnce sync.Once
)

type dateUtil struct{}

func NewDateUtils() *dateUtil {
	dateUtilOnce.Do(func() {
		dateUtilTemp = &dateUtil{}
	})
	return dateUtilTemp
}

// 判断当前时间是否在指定的时间段内
// 格式："HH:mm"&#126;"HH:mm"
func (m *dateUtil) IsCurrentTimeInTimeRange(startTimeStr, endTimeStr string, currentTime time.Time) (bool, error) {
	// 解析开始时间和结束时间
	startTime, err := time.Parse("15:04", startTimeStr)
	if err != nil {
		return false, err
	}
	endTime, err := time.Parse("15:04", endTimeStr)
	if err != nil {
		return false, err
	}

	// 确保开始时间在结束时间之前
	if startTime.After(endTime) {
		startTime, endTime = endTime, startTime
	}

	// 获取当前时间的小时和分钟部分
	currentHour := currentTime.Hour()
	currentMinute := currentTime.Minute()
	currentTimeOnly := time.Date(currentTime.Year(), currentTime.Month(), currentTime.Day(), currentHour, currentMinute, 0, 0, currentTime.Location())

	// 判断当前时间是否在时间段内
	return currentTimeOnly.After(startTime) && currentTimeOnly.Before(endTime), nil
}
